package com.test39_集合应用.service.impl;

import com.test39_集合应用.service.IHRService;
import com.test39_集合应用.vo.Company;
import com.test39_集合应用.vo.Dept;
import com.test39_集合应用.vo.Emp;

import java.util.Arrays;
import java.util.Map;

public class HRServiceImpl implements IHRService {
    private Company company;

    /** 初始化信息 */
    @Override
    public Company init() {
        this.company = new Company("沐言科技", "www.yootk.com");
        Dept deptA = new Dept(10L, "技术研发部");
        Dept deptB = new Dept(20L, "教学研发部");
        Dept deptC = new Dept(30L, "售后服务部");
        // 设置部门与公司之间的关联
        deptA.setCompany(this.company);
        deptB.setCompany(this.company);
        deptC.setCompany(this.company);
        // 设置公司与部门之间的关联
        this.company.getDepts().put(deptA.getDeptno(), deptA);
        this.company.getDepts().put(deptB.getDeptno(), deptB);
        this.company.getDepts().put(deptC.getDeptno(), deptC);

        Emp empA = new Emp(7867L, "Leo");
        Emp empB = new Emp(7962L, "Hello");
        Emp empC = new Emp(7369L, "Smith");
        Emp empD = new Emp(7566L, "Allen");
        Emp empE = new Emp(7579L, "Ford");
        Emp empF = new Emp(8919L, "King");
        // 设置雇员与部门之间的关联
        empA.setDept(deptA);
        empB.setDept(deptA);
        empC.setDept(deptA);
        empD.setDept(deptB);
        empE.setDept(deptB);
        empF.setDept(deptB);
        // 设置部门与雇员之间的关联
        deptA.getEmps().put(empA.getEmpno(), empA);
        deptA.getEmps().put(empB.getEmpno(), empB);
        deptA.getEmps().put(empC.getEmpno(), empC);
        deptB.getEmps().put(empD.getEmpno(), empD);
        deptB.getEmps().put(empE.getEmpno(), empE);
        deptB.getEmps().put(empF.getEmpno(), empF);
        // 设置雇员业务信息
        empA.getBusiness().addAll(Arrays.asList("Java", "业务完善", "项目组长"));
        empB.getBusiness().addAll(Arrays.asList("Java", "业务完善"));
        empC.getBusiness().addAll(Arrays.asList("Java", "业务完善"));
        empD.getBusiness().addAll(Arrays.asList("咨询", "VIP服务", "公开课"));
        empE.getBusiness().addAll(Arrays.asList("咨询", "VIP服务"));
        empF.getBusiness().addAll(Arrays.asList("咨询", "VIP服务"));
        return this.company;
    }

    /** 获取公司信息 */
    @Override
    public Company findCompany() {
        return this.company;
    }

    /** 根据部门编号找到部门信息 */
    @Override
    public Dept findByDept(Long deptno) {
        return this.company.getDepts().get(deptno);
    }

    /** 根据雇员编号找到雇员信息 */
    @Override
    public Emp findByEmp(Long empno) {
        for (Map.Entry<Long, Dept> deptEntry : this.company.getDepts().entrySet()) {
            if (deptEntry.getValue().getEmps().containsKey(empno)) {
                return deptEntry.getValue().getEmps().get(empno);
            }
        }
        return null;
    }
}
